//
//  LDSprite.h
//  
//
//  Created by snowymydog on 29/05/10.
//  Copyright LazyDog 2010. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "Texture2D.h"
//@class Texture2D;

@interface LDSprite : NSObject {
//	UIWindow *window;
//	EAGLView *glView;
	GLuint		_name;

	NSUInteger	_spritesheetWidth,	// spritesheet修正後闊度
				_spritesheetHeight; // spritesheet修正後高度

	GLfloat		_clipX,				// clipX, clipY是 clipping region在spritesheet上的起始位置（左上角為源點）
				_clipY,
				tileWidth,		// 一個frame的闊度
				tileHeight;		// 一個frame的高度
	CGSize		_size;			// 原始高度及闊度 (size.width, size.height)
	
	//NSString	*key;			// 索引用，請自行處理是獨一無二的
	char		key[16];
	int			tileInterval;		// 每相隔多少frame自動變換tile
	int			tileTimer;			// 儲存現在經過之多少frame
	int			startTile;			// 動畫由那一個tile開始
	int			endTile;			// 動畫由那一個tile結朿
	int			nowTile;			// 動畫現在進行到那一個tile
	BOOL		tileRepeat;			// 動畫會不斷重覆
	
	int			movesInterval;		// 每相隔多少frame自動移動
	int			movesTimer;			// 儲存現在經過之多少frame
	float		startX;				// 自動移動開始地點: X軸
	float		endX;				// 自動移動完結地點: X軸
	float		nowX;				// 自動移動現在地點: X軸
	float		movesIncX;			// 每次移動的距離: X軸
	float		startY;				// 自動移動開始地點: Y軸
	float		endY;				// 自動移動完結地點: Y軸
	float		nowY;				// 自動移動現在地點: Y軸
	BOOL		extendXY;			// 自動計算將完結地點延伸至screen外
	float		movesIncY;			// 每次移動的距離: Y軸
	BOOL		movesRepeat;		// 自動重覆，會由startX及startY重新開始
	
	int			distantX;
	int			distantY;
	float		distantRatio;

	BOOL		drawMe;
}

@property	GLuint _name;
@property	NSUInteger _spritesheetWidth, _spritesheetHeight;
@property	CGSize _size;

//@property	(copy) NSString *key;
@property	GLfloat tileWidth;
@property	GLfloat tileHeight;
@property	int tileInterval;
@property	int tileTimer;
@property	int startTile;
@property	int endTile;
@property	int nowTile;
@property	BOOL tileRepeat;
@property	int movesInterval, movesTimer;
@property	float startX, endX, nowX, movesIncX;
@property	float startY, endY, nowY, movesIncY;
@property	BOOL extendXY, movesRepeat;
@property	int distantX, distantY;
@property	float distantRatio;
@property	BOOL drawMe;

//@property GLfloat _clipX;
//@property GLfloat _clipY;

// - (id) initWithDescription;
- (id) makeSpriteFromSprite : (LDSprite *) source;
- (void) linkSpritesheet : (Texture2D *) spriteSheet;
- (void) drawClipAtPoint:(CGPoint)point;
- (void) setClip: (CGFloat) clipX:(CGFloat) clipY:(CGFloat)clipWidth:(CGFloat)clipHeight;
- (void) setTile: (int) tile;
- (void) animateSprite;
- (void) calcDistantRatio;
- (void) extendEndXY;
- (BOOL) isOnScreen;
- (void) setStartXY :(float) x : (float) y;
- (void) setNowXY : (float) x : (float) y;
- (void) setEndXY :(float) x : (float) y;
- (void) reset;
- (void) setSpriteKey : (char *) skey;
- (char *) spriteKey;
- (void) setDrawMe : (BOOL) yesno;

@end
